package com.yww.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yww.entity.Modules;
import com.yww.entity.RoleModules;
import com.yww.mapper.ModulesMapper;
import com.yww.mapper.RoleModulesMapper;
import com.yww.service.IModulesService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author jobob
 * @since 2020-05-20
 */
@Service
public class ModulesServiceImpl extends ServiceImpl<ModulesMapper, Modules> implements IModulesService {
    @Resource
    RoleModulesMapper roleModulesMapper;//角色模块中间表
    @Resource
    ModulesMapper modulesMapper;

    List<Integer> modulesIds=null;


    @Override
    public List<Modules> getModulesTree() {

        //声明一个集合用来存储结果
        List<Modules> tree=new ArrayList<>();
        //(全查)查询出所有的模块
        QueryWrapper<Modules> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("weight");
        List<Modules> list = this.baseMapper.selectList(queryWrapper);
        //遍历 判断是否为根节点 若是 加入在树中
        //同时 给这个节点找孩子 设置子节点
        for(Modules m:list){
            if(m.getParentId()!=null && m.getParentId()==0) {
                tree.add(findChildren(m, list));
            }
        }
        return tree;
    }

    @Override
    public List<Modules> getModulesTreeByRoleId(Integer roleId) {
        //声明一个集合
        modulesIds=roleModulesMapper.getModulesIdsByRoleId(roleId);

        //声明一个集合用来存储结果
        List<Modules> tree=new ArrayList<>();
        //(全查)查询出所有的模块
        List<Modules> list = this.baseMapper.selectList(null);
       // List<Modules> list=getModulesTree();
        //遍历 判断是否为根节点 若是 加入在树中
        //同时 给这个节点找孩子 设置子节点
        for(Modules m:list){
            if(m.getParentId()!=null && m.getParentId()==0) {
                tree.add(findChildren(m, list));
            }
        }
//        for(Modules m:tree){
//            m.setChecked(false);
//        }

        return tree;
    }

    @Override
    public Modules getModulesByModId(Integer modId) {
        return modulesMapper.getModulesByModId(modId);
    }

    @Override
    public List<Modules> getModulesTreeByUserId(Integer userId) {
        modulesIds=null;
        //声明一个集合用来存储结果
        List<Modules> tree=new ArrayList<>();
        //(全查)查询出所有的模块
        List<Modules> list=modulesMapper.getModulesTreeByUserId(userId);
        // List<Modules> list = this.baseMapper.selectList(null);
        //遍历 判断是否为根节点 若是 加入在树中
        //同时 给这个节点找孩子 设置子节点
        for(Modules m:list){
            if(m.getParentId()!=null && m.getParentId()==0) {
                tree.add(findChildren(m, list));
            }
        }
        return tree;
    }

    @Override
    public Modules getModName(Modules modules) {
        return modulesMapper.getModName(modules);
    }

    @Override
    public List<RoleModules> getRoleByModules(Integer modId) {
        return modulesMapper.getRoleByModules(modId);
    }

    //(自己调自己) 递归思想
    public Modules findChildren(Modules m, List<Modules> list) {
     /*   System.out.println("id----"+modulesIds);
        System.out.println("id2222----"+m.getModId());*/
     //遍历循环中的节点 查找子节点
        for (Modules item : list) {
            //找孩子
            if (m.getModId() == item.getParentId()) {
                if (m.getChildren() == null) {
                    m.setChildren(new ArrayList<Modules>());
                }
                m.getChildren().add(findChildren(item, list));
            }
        }
        //设置选中
            if(modulesIds!=null && modulesIds.contains(m.getModId()) && m.getParentId()!=0 && m.getChildren()==null){
                System.out.println(m.getModId() + "设置为true了");
                m.setChecked(true);
                //item.setChecked(true);
            }


        return m;
    }



}
